/**
 * Copyright (c), 上海沃恩信息科技有限公司.
 * All rights reserved.
 * Licensed under BSD (https://www.pittypat.work/bsd.html).
 */

package pittypat.data;

import java.beans.PropertyVetoException;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.InvocationTargetException;
import java.sql.SQLException;

import pittypat.FunctionArgs;
import pittypat.FunctionModel;
import pittypat.IAsyncProgress;
import pittypat.configuration.ConfigException;

/**
 * 表示一个数据服务。数据服务可能是数据库、文件或者 Web Service 等。 IDataService 被一个 Module
 * 在内部创建和引用，用于执行数据操作任务，比如数据库操作。数据服务的路径由配置文件中的模块配置项目定义。 Module 中的 Api
 * 功能方法可能在不同的线程上执行，因此不应该在 IDataService 内部保存和使用线程不安全的数据，比如一个Connection 对象。
 * 
 * @see pittypat.configuration.ModuleConfig
 * @see pittypat.Module
 */
public interface IDataService {
	/**
	 * 在当前数据服务上执行指定的功能数据操作。
	 * 
	 * @param model
	 *            功能模型对象，其中包含了功能的参数列表、执行状态以及相关消息。
	 * @param progress
	 *            跟踪和汇报异步操作的进度。
	 * @throws ConfigException
	 * @throws SQLException
	 * @throws UnsupportedEncodingException
	 * @throws PropertyVetoException
	 * @throws IllegalAccessException
	 * @throws InstantiationException
	 * @throws SecurityException
	 * @throws NoSuchMethodException
	 * @throws InvocationTargetException
	 * @throws IllegalArgumentException
	 */
	<T extends FunctionArgs> void exec(FunctionModel<T> model, IAsyncProgress progress)
			throws ConfigException, SQLException, UnsupportedEncodingException, PropertyVetoException,
			InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException,
			NoSuchMethodException, SecurityException;
}
